home *** CD-ROM | disk | FTP | other *** search
/ Stone Design / Stone Design.iso / Stone_Friends / Wave / WavesWorld / Source / IBPalettes / WW3DKit / RIBMakeCubeFaceEnvironment.m < prev    next >
Encoding:
Text File  |  1995-03-22  |  5.8 KB  |  197 lines

  1.  
  2. #import "RIBMakeCubeFaceEnvironment.h"
  3. #import "ri/ri.h"
  4.  
  5. @implementation RIBMakeCubeFaceEnvironment
  6.  
  7. + initialize { return [RIBMakeCubeFaceEnvironment setVersion:1], self; }
  8.  
  9. - init
  10. {
  11.   [super init];
  12.  
  13.   pX = nX = pY = nY = pZ = nZ = textureName = NULL;
  14.   filterFunc = (RtFloatFunc)RiGaussianFilter;
  15.   filterFuncName = NXCopyStringBuffer("gaussian");
  16.   sWidth = tWidth = 3.0;
  17.  
  18.   autoGenerate = NO;
  19.   onlyGenerateForFirstFrameWhenShooting = NO;
  20.   epsilonForAutoGenerate = 1./31.;
  21.  
  22.   myRect.origin.x = 0.0; 
  23.   myRect.origin.y = 0.0; 
  24.   myRect.size.width  = 64.0; 
  25.   myRect.size.height = 64.0; 
  26.  
  27.   autoScale = YES;
  28.   autoScalePercentage = .25;
  29.  
  30.   return self;
  31. }
  32.  
  33. - setPX:(const char *)newPX nX:(const char *)newNX
  34.      pY:(const char *)newPY nY:(const char *)newNY
  35.      pZ:(const char *)newPZ nZ:(const char *)newNZ
  36.      textureName:(const char *)newTextureName
  37.      filterFuncName:(const char *)newFilterFuncName
  38.      fov:(RtFloat)newFOV
  39.      sWidth:(RtFloat)newSWidth tWidth:(RtFloat)newTWidth 
  40.      n:(int)newN tokens:(RtToken *)newTokens parms:(RtPointer *)newParms archiveVector:(char **)newArchiveVector
  41.      printfTypeVector:(int *)newPrintfTypeVector printfNVector:(int *)newPrintfNVector
  42. {
  43.    pX = NXCopyStringBuffer(newPX);
  44.    nX = NXCopyStringBuffer(newNX);
  45.    pY = NXCopyStringBuffer(newPY);
  46.    nY = NXCopyStringBuffer(newNY);
  47.    pZ = NXCopyStringBuffer(newPZ);
  48.    nZ = NXCopyStringBuffer(newNZ);
  49.    textureName = NXCopyStringBuffer(newTextureName);
  50.    if (!strcmp(newFilterFuncName, "box"))
  51.    {  filterFunc = (RtFloatFunc)RiBoxFilter; 
  52.       filterFuncName = NXCopyStringBuffer("box"); 
  53.    }
  54.    if (!strcmp(newFilterFuncName, "triangle"))
  55.    {  filterFunc = (RtFloatFunc)RiTriangleFilter; 
  56.       filterFuncName = NXCopyStringBuffer("triangle"); 
  57.    }
  58.    if (!strcmp(newFilterFuncName, "catmull-rom"))
  59.    {  filterFunc = (RtFloatFunc)RiCatmullRomFilter; 
  60.       filterFuncName = NXCopyStringBuffer("catmull-rom"); 
  61.    }
  62.    if (!strcmp(newFilterFuncName, "sinc"))
  63.    {  filterFunc = (RtFloatFunc)RiSincFilter; 
  64.       filterFuncName = NXCopyStringBuffer("sinc"); 
  65.    }
  66.    if (!strcmp(newFilterFuncName, "gaussian"))
  67.    {  filterFunc = (RtFloatFunc)RiGaussianFilter; 
  68.       filterFuncName = NXCopyStringBuffer("gaussian"); 
  69.    }
  70.  
  71.    fov = newFOV;
  72.    sWidth = newSWidth;
  73.    tWidth = newTWidth;
  74.  
  75.    [self setN:newN tokens:newTokens parms:newParms archiveVector:newArchiveVector
  76.              printfTypeVector:newPrintfTypeVector printfNVector:newPrintfNVector];
  77.  
  78.    // okay, now we have to check our parameter list to see if any of my other flags have been set...
  79.  
  80.    return self;
  81. }
  82.  
  83. - setAutoGenerate:(BOOL)flag
  84. {
  85.   if (flag) // okay, we're setting it True
  86.   {  // if it wasn't already true, malloc up a tmpCamera and set it true
  87.      if (!autoGenerate)
  88.      {  tmpCamera = [[WW3DCamera alloc] initFrame:&myRect];
  89.      } 
  90.      autoGenerate = YES;
  91.   }  
  92.   else // we're turning it off
  93.   {  // if it wasn't already true, malloc up a tmpCamera and set it true
  94.      if (autoGenerate)
  95.      {  [tmpCamera setWorldShape:nil]; // just to be sure it doesn't do anything stupid...
  96.         [tmpCamera free];
  97.      } 
  98.      autoGenerate = NO;
  99.   }  
  100.   return self;
  101. }
  102.  
  103. - renderMaps:(WW3DCamera *)camera startingAt:(RtFloat)shutterOpenTime endingAt:(RtFloat)shutterCloseTime usingStream:(NXStream *)ns
  104. {
  105.    if (autoGenerate)
  106.    {  // okay, we now want to set the worldShape of our camera 
  107.       [tmpCamera setWorldShape:[camera worldShape]];
  108.  
  109.       // now we need to figure out where the heck we are and put the camera there.
  110.       // the way we do that is we grab our shape, get it's inverse transform from the camera to it
  111.       // we do that by getting the my shap
  112.       // we then take that 4x4 and transform it by the ribCommand list members until we hit here.
  113.  
  114.    }
  115.    NXPrintf(ns, 
  116.         "MakeCubeFaceEnvironment \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" %f \"%s\" %f %f ", 
  117.         pX, nX, pY, nY, pZ, nZ, textureName, fov, filterFuncName, sWidth, tWidth);
  118.    [super writeParameterList:ns];
  119.    return self;
  120. }
  121.  
  122. - renderMaps:(WW3DCamera *)camera usingStream:(NXStream *)ns
  123. {
  124.   RtFloat  shutterOpenTime = [camera shutterOpenTime],
  125.            shutterCloseTime = [camera shutterCloseTime];
  126.  
  127.  
  128.   return [self renderMaps:camera startingAt:shutterOpenTime endingAt:shutterCloseTime usingStream:ns];
  129. }
  130.  
  131.  
  132. - renderMaps:(WW3DCamera *)camera startingAt:(RtFloat)shutterOpenTime endingAt:(RtFloat)shutterCloseTime
  133. {
  134.   RiMakeCubeFaceEnvironmentV(pX, nX, pY, nY, pZ, nZ, textureName, fov, filterFunc, sWidth, tWidth, n, tokens, parms);
  135.  
  136.   return self;
  137. }
  138.  
  139. - renderMaps:(WW3DCamera *)camera
  140. {
  141.   RtFloat  shutterOpenTime = [camera shutterOpenTime],
  142.            shutterCloseTime = [camera shutterCloseTime];
  143.  
  144.  
  145.   return [self renderSelf:camera startingAt:shutterOpenTime endingAt:shutterCloseTime];
  146. }
  147.  
  148.  
  149. - writeEve:(NXStream *)stream atTabLevel:(int)tab
  150. {
  151.    int  i;
  152.  
  153.  
  154.    for (i = 0; i < tab; i++)
  155.    {  NXPrintf(stream, "\t");
  156.    }
  157.    NXPrintf(stream, 
  158.         "MakeCubeFaceEnvironment {%s} {%s} {%s} {%s} {%s} {%s} {%s} %f {%s} %f %f ", 
  159.         pX, nX, pY, nY, pZ, nZ, textureName, fov, filterFuncName, sWidth, tWidth);
  160.    [super writeParameterList:stream];
  161.    return self;
  162. }
  163.  
  164. #define typeVector "*******f*ffccfffcf"
  165. #define typeValues &pX, &nX, &pY, &nY, &pZ, &nZ, &textureName, \
  166.         &fov, &filterFuncName, &sWidth, &tWidth, \
  167.         &autoGenerate, &onlyGenerateForFirstFrameWhenShooting, \
  168.         &epsilonForAutoGenerate, &myRect.size.width, &myRect.size.height, \
  169.         &autoScale, &autoScalePercentage
  170.  
  171. - read:(NXTypedStream *)stream 
  172. {
  173.     int version;
  174.     [super read:stream];
  175.  
  176.     version = NXTypedStreamClassVersion(stream, "RIBMakeCubeFaceEnvironment");
  177.     if (version == 0) NXReadTypes(stream, "i", &version), version=1;
  178.     if (version == 1)
  179.     {  NXReadTypes(stream, typeVector, typeValues);
  180.     } 
  181.     else 
  182.     {
  183.     }
  184.     return self;
  185. }
  186.  
  187. - write:(NXTypedStream *)stream 
  188. {
  189.     [super write:stream];
  190.  
  191.     NXWriteTypes(stream, typeVector, typeValues);
  192.  
  193.     return self;
  194. }
  195.  
  196. @end
  197.